#ifndef MUSICPLAYER_H
#define MUSICPLAYER_H

#include <QWidget>  // 父类改为 QWidget
#include <QMediaPlayer>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QPushButton>
#include <QWidget>
#include <QMediaPlayer>
#include <QNetworkAccessManager>
#include <QList>
#include <QListView>
#include <QStandardItemModel>
#include <QLineEdit>
#include <QScrollBar>
#include "musiccollecteddao.h"
#include "playlistwindow.h"
#include "musicjsonparser.h"
#include <QDesktopWidget>
#include <QPropertyAnimation>

enum CustomRoles {
    SongIdRole = Qt::UserRole + 2,  // 歌曲ID
    songTitleRole,
    songSingerRole,
    SongUrlRole                     // 歌曲URL
};

class MusicPlayer : public QWidget
{
    Q_OBJECT
    
public:
    // 构造函数
    MusicPlayer(PlayListWindow *playlistWindow, QWidget *parent = nullptr);
    
    // 析构函数
    ~MusicPlayer();
    void positionResultPopup();
private:
    // UI组件
    QLineEdit *searchEdit;       // 搜索框
    QLabel *titleLabel;          // 歌曲标题标签
    QLabel *singerLabel;         // 歌手标签
    QSlider *progressSlider;     // 播放进度条
    QPushButton *prevBtn;        // 上一曲按钮
    QPushButton *playBtn;        // 播放/暂停按钮
    QPushButton *nextBtn;        // 下一曲按钮
    QPushButton *collectBtn;     // 收藏按钮
    QLabel *currentTimeLabel;    // 当前歌曲时间
    QLabel *totalTimeLabel;      // 歌曲总时长
    
    // 歌词相关
    QListWidget *lyricListWidget; // 歌词列表部件
    QMap<qint64, QString> lyricMap; // 歌词映射: 时间(毫秒) -> 歌词行
    QList<qint64> lyricTimes; // 歌词时间点列表
    int currentLyricIndex; // 当前歌词行索引
    QTimer *lyricTimer; // 歌词更新定时器
    QPropertyAnimation *scrollAnimation = nullptr; // 歌词滚动动画相关
    
    // 音乐列表浮窗
    QWidget *resultPopup;
    QListView *resultView;
    QStandardItemModel *model;
    
    // 核心组件
    QMediaPlayer *player;        // 媒体播放器
    QNetworkAccessManager *netManager;  // 网络访问管理器
    MySqlMusicCollectedDao *musicDao;   // 数据库访问对象
    
    // 数据
    QList<MusicInfo> collectedSongs;    // 已收藏歌曲列表
    QList<MusicInfo> currentSearchResults;  // 当前搜索结果
    MusicInfo currentSong;              // 当前播放歌曲
    int currentPlayIndex;               // 当前播放索引
    PlayListWindow *playlistWindow;     // 播放列表窗口指针
    // 存储音乐
    QList<SongInfo> songs;
    // 当前音乐播放状态
    int music_state=0;
    
    // 初始化方法
    void initUI();                      // 初始化UI
    void createWidgets();               // 创建UI组件
    void setupLayouts();                // 设置布局
    void applyStyles();                 // 应用样式
    void connectUISignals();            // 连接UI信号
    void connectPlaylistSignals();      // 连接播放列表信号
    void connectPlayerSignals();        // 连接播放器信号
    void loadCollectedSongs();          // 加载已收藏歌曲
    
    // 功能方法
    void playSong(const MusicInfo &song);  // 播放指定歌曲
    // 歌词解析函数
    void parseLyrics(const QString &lyricText);
    // 歌词获取函数
    void fetchLyrics(const QString &songId);


    
private slots:
    // 播放控制槽函数
    void onPlayPauseClicked();         // 播放/暂停
    void onPrevClicked();               // 上一曲
    void onNextClicked();               // 下一曲
    void onProgressChanged(int value);  // 进度条改变
    // 歌词更新
    void updateLyricDisplay();
    
    // 媒体状态槽函数
    void onPlayerPositionChanged(qint64 pos);  // 播放位置改变
    void onPlayerDurationChanged(qint64 dur);  // 播放时长改变
    
    // 用户交互槽函数
    void onCollectClicked();            // 收藏/取消收藏
    void onSearchReturnPressed();       // 搜索框回车
    
    // 网络请求槽函数
    void onNetworkRequestFinished(QNetworkReply *reply);  // 网络请求完成
    
    // 播放列表交互槽函数
    void onPlaylistItemSelected(int index);      // 播放列表项被选中
    void onPlaylistRemoveSong(const QString &songId);  // 从播放列表移除歌曲
    // 列表项点击槽函数
    void onResultViewClicked(const QModelIndex &index);
};

#endif // MUSICPLAYER_H
